package projorientado.ocr.impl;

import projorientado.ocr.*;
import projorientado.*;
import projorientado.image.ImageLayerData;
import projorientado.image.ImageComparator;
import java.util.Arrays;
import java.util.Vector;

/**
 * Sistema de reconhecimento de caracteres baseado em distância de imagens.<BR>
 * Basicamente esse sistema compara a imagem que deverá ser reconhecida com um banco de imagens
 * já conhecidas (alfabeto), retornando um valor de custo para cada comparado.<BR>
 * A determinação de distância será feito a partir de um sistema de comparação de imagens.
 */
public class SimpleRecognizer extends OCRecognizer {

    private Vector<AlphabetChar> alphabet;
    private ImageComparator imageComparator;

    public SimpleRecognizer(Vector<AlphabetChar> alphabet, ImageComparator imageComparator) {
        this.alphabet = alphabet;
        this.imageComparator = imageComparator;
    }

    public SimpleRecognizer(ImageComparator imageComparator) {
        this.imageComparator = imageComparator;
    }

    public SimpleRecognizer() {
    }

    public Vector<AlphabetChar> getAlphabet() {
        return alphabet;
    }

    public void setAlphabet(Vector<AlphabetChar> alphabet) {
        this.alphabet = alphabet;
    }
    
    public RecognizedChar[] recognizeChar(ImageLayerData image) {
        
        RecognizedChar[] ret = new RecognizedChar[alphabet.size()];
        
        for(int i = 0; i < alphabet.size(); i++) {
            AlphabetChar alphabetChar = alphabet.elementAt(i);
            
            ret[i] = new RecognizedChar();
            ret[i].setCharValue(alphabetChar.getCharValue());
            ret[i].setCost(imageComparator.compareImages(alphabetChar.getImage(),image));
        }
        
        Arrays.sort(ret);
        
        return ret;
    }

    public ImageComparator getImageComparator() {
        return imageComparator;
    }

    public void setImageComparator(ImageComparator imageComparator) {
        this.imageComparator = imageComparator;
    }
    
}
